package com.itcam.designmodule.singleton_;

// 饿汉式
public class SingleTon01 {
    public static void main(String[] args) {
        // GirlFriend xh = new GirlFriend("小红");
        // GirlFriend xb = new GirlFriend("小白");

        //通过方法可以获取对象
        GirlFriend instance1 = GirlFriend.getInstance();
        System.out.println(instance1);
        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2);
        System.out.println(instance1 == instance2);//T
        //System.out.println(GirlFriend.n1);
    }
}

class GirlFriend {
    private String name;
    //public static int n1 = 100;

    //为了能够在静态方法中，返回gf对象，需要将其修饰为static
    //对象，通常是重量级的对象, 饿汉式可能造成创建了对象，但是沒有使用.
    private static GirlFriend gf = new GirlFriend("小红红");

    //如何保障我们只能创建一个GirlFriend对象
    //步骤[单例模式-饿汉式]
    //1. 将构造器私有化
    //2. 在类的内部直接创建对象(该对象是static)
    //3. 提供一个公共的static方法，返回gf对象
    private GirlFriend(String name) {
        System.out.println("构造器被调用.");
        this.name = name;
    }

    public static GirlFriend getInstance() {
        return gf;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}
